package mianshi.reference;

import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;

public class ReferenceDemo {

    static Object strongRef = new Object();

    public static void main(String[] args) {
        // 在内存充足的情况下，不会被回收，即使发生内存不足OOM。除非显示置为null
        Object obj = strongRef;
        strongRef = null;
        System.gc();
        System.out.println(obj);

        // 在内存充足的情况下，不会被回收; 分配对象时发现内存不足，会进行GC回收，避免OOM；
        Object softRef = new Object();
        SoftReference softReference = new SoftReference(softRef);
//        softRef = null;
//        System.gc();
        System.out.println(softReference.get());

        // 只有发生GC的时候对象会被回收；
        Object weakObject = new Object();
        WeakReference weakReference = new WeakReference(weakObject);
        weakObject = null;
        System.gc();
        System.out.println(weakReference.get());
    }

}
